const { UserModel } = require('../model/users')


// 导入 token的方法
const {
    getToken,
    verifyToken
} = require('../common/token')
// 注册
function handleReg(req, res) {
    const {
        phone,
        username,
        password,
        nickname
    } = req.body
    //走到这里 表示数据格式验证成功 
    // 需要去数据库验证 有没有这个手机号 
    // 查找  
    UserModel.find({
        phone
    }).then((result) => {
        console.log(result)
        if (result && result.length == 0) {
            // 如果没有 那么直接保存该用户信息 返回注册成功
            new UserModel({
                phone,
                username,
                password,
                nickname
            }).save().then((item) => {
                res.send({
                    code: 1,
                    message: '注册成功1111111！'
                })
            })
        } else {
            // 如果有 那么直接返回 该手机号码已经注册 
            res.send({
                code: 0,
                message: '该手机号码已经被注册了'
            })
        }
    })

}

// 登录
function handleLogin(req, res) {
    const {
        username,
        password
    } = req.body

    // 走到这里  参数格式已经校验了  
    // 去数据库查找 用户名和密码匹配  
    UserModel.find({
        username,
        password
    }).then((result) => {
        console.log(result)
        if (result && result.length == 1 && result[0].phone == '13838380438') {
            let info = {
                username,
                userId: result[0]._id,
                phone: result[0].phone
            }

            res.send({
                code: 1,
                message: '登录成功',
                token: getToken(info),
                userId: result[0]._id,
                phone: result[0].phone
            })
        } else if (result && result.length == 1) {
            // 表示找到匹配的  
            // 需要生成token 返回登录成功
            let info = {
                username,
                userId: result[0]._id
            }

            res.send({
                code: 1,
                message: '登录成功',
                token: getToken(info),
                userId: result[0]._id
            })
        } else {
            res.send({
                code: 0,
                message: '用户名或者密码有误！'
            })
        }
    })
}


// 获取个人信息  

function handleInfo(req, res) {
    // 根据前端传过来的用户id  去数据库查找用户信息 
    const {
        id
    } = req.query
    console.log('>>>>>>>>>>', id)
    UserModel.findById(id).then(result => {
        if (result) {
            let info = JSON.parse(JSON.stringify(result))
            delete info.password
            res.send({
                code: 1,
                info,
                message: '获取个人信息成功'
            })
        }
    }).catch((err) => {
        res.send({
            code: 0,
            message: err
        })
    })
}


// 修改个人信息 

function handleUpdate(req, res) {
    // 走到这里 表示参数验证通过  
    const {
        id,
        nickname,
        age,
        gender,
        headerImg
    } = req.body
    
    UserModel.findByIdAndUpdate(id, {
        nickname,
        age,
        gender,
        headerImg
    }).then(() => {
        res.send({
            code: 1,
            message: '修改成功'
        })
    }).catch(err => {
        res.send({
            code: 0,
            message: '失败'
        })
    })
}

//修改密码
function handlePassword(req, res) {
    const { id, oldpassword, newpassword } = req.body
    // 表明登录过了 参数验证通过 直接修改了

    // 去数据库进行修改 
    // 找到这条数据  
    UserModel.updateOne({ _id: id, password: oldpassword },
        { password: newpassword }).then(() => {
            res.send({
                code: 1,
                message: "密码修改成功"
            })
        })

}

//退出登录
function handleOut(req, res) {
    res.send({
        code: 1,
        message: '已注销'
    })
}

//获取用户
function handleList(req, res) {
    const {
        search,
        page,
        pagesize
    } = req.query
    UserModel.find().then(result => {
        let arr = result.filter(it => it.username.includes(search))
        let obj = {
            code: 1,
            message: '列表请求成功',
            list: arr.slice((page - 1) * pagesize, page * pagesize),
            arr
        }
        res.send(obj)
    })
}

module.exports = {
    handleReg,
    handleLogin,
    handleInfo,
    handleUpdate,
    handlePassword,
    handleOut,
    handleList
}